<?php 
/**
 * 商品属性模型
 */
class GoodsAttrModel extends Model{
    public $table = 'goods_attr';
		
    /*
	 * 添加
	 * */
    public function addGoodsAttr($gid){
	  //attr是一个数组形式，下标为attr
		$attr=isset($_POST['attr']) ? $_POST['attr'] : array();
		//p($attr);die;
		//循环属性值不可选
		foreach ($attr as $taid => $v) {
			foreach ($v['tavalue'] as $key => $value) {
				//如果有用户有传走，不传是空数组
				if($value){
					//重组数组
					$attrData=array(
						'gtvalue'=>$value,
						'taid'=>$taid,
						'gid'=>$gid,
					);
					//p($attrData);
					$this->add($attrData);
				}
			}
				
		}
		//商品规格可选
		$spec=isset($_POST['spec']) ? $_POST['spec'] : array();
			//循环规格
			foreach ($spec as $taid => $v) {
				foreach ($v['tavalue'] as $key => $value) {
					//如果有用户有传走，不传是空数组
					if($value){
						$specData=array(
							'gtvalue'=>$value,
							'taid'=>$taid,
							'added'=>$v['added'][$key],
							'gid'=>$gid,
						);
						//p($specData);
						$this->add($specData);
					}
				}
			}
	  
	  
    }
    
    
    //---------------------前台商品列表页筛选----------------------------
    
     /**
	 * 通过商品的gid获得商品属性
	 */
	public function gidGetAttr($gids){
		//通过商品gid获得商品属性
		$attr = $this->where("gid in(" . implode(',', $gids) . ")")->group('gtvalue')->all();
		//把同一taid的属性归结在一起
		$temp1 = array();
		foreach ($attr as $v) {
			$temp1[$v['taid']][] = $v;
		}
		//让数组有类型属性名称和所对应的值
		$temp2 = array();
		$model = M('type_attr');
		foreach ($temp1 as $taid => $v) {
			$temp2[] = array(
				'name' => $model->where('taid=' . $taid)->getField('taname'),
				'value'=> $v
			);
		}
		return $temp2;
	}
	/**
	 * 通过筛选参数，筛选商品gid
	 */
	public function filterGids($param,$gids){
		$gid = array();
		foreach ($param as $gaid) {
			//如果不是选择“不限”
			if($gaid){
				$gid[] = M()->join('__goods_attr__ ga1 JOIN __goods_attr__ ga2 ON ga1.gtvalue=ga2.gtvalue')->where("ga1.gaid={$gaid}")->getField('ga2.gid',true);
			}
		}
		//如果不是全部选择“不限”的时候，取交集，证明有选择其他，比如选择了M
		if($gid){
			//取交集，第一个和第二个取交集，上两个的结果再和最后一个取交集
			foreach ($gid as $key => $value) {
				if($key == 0){
					$temp = $value;
				}else{
					$temp = array_intersect($gid[$key], $temp);
				}
			}
			//筛选出来的数组再和分类所获得的gid取交集
			$gids = array_intersect($temp, $gids);
		}
		//如果全部是“不限”的时候，返出该分类下面的所有的gid
		return $gids;
	}
    
    
    
    
    
    
    
    
    
    
    
    
 }
 
 
 
 
 
 
 
 
 
 
 
































 ?>